package main.java.ensao.cryptography.ui;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import main.java.ensao.cryptography.dsamodule.DSASignButtonListner;
import main.java.ensao.cryptography.dsamodule.DSAVerifyButtonListner;

public class DSAPane extends JPanel {
	JTextField textField_msgcl;
	JTextField textField_priv_x;
	JTextField textField_publ_p;
	JTextField textField_publ_q;
	JTextField textField_publ_g;
	JTextField textField_publ_y;
	JTextField textField_priv_k;
	JLabel gen_keys;
	JLabel label_x;
	JLabel label_y;
	JLabel label_p;
	JLabel label_q;
	JLabel label_g;
	JLabel label_k;
	JLabel note1;
	JLabel note2;
	JLabel label_r;
	JLabel label_s;

	JTextField textField_r;
	JTextField textField_s;

	JLabel label_w;
	JLabel label_a;
	JLabel label_b;
	JLabel label_v;
	JLabel verif;
	JLabel result;
	JTextField textField_w;
	JTextField textField_a;
	JTextField textField_b;
	JTextField textField_v;

	public DSAPane() {
		this.init();
	}

	public void init() {

		this.setLayout(new GridBagLayout());
		GridBagConstraints gbc = new GridBagConstraints();

		// un premier onglet
		JLabel label = new JLabel("Sasissez un entier : ");
		textField_msgcl = new JTextField(12);

		label_x = new JLabel(" x :");
		label_y = new JLabel(" y :");
		label_p = new JLabel(" p :");
		label_q = new JLabel(" q :");
		label_g = new JLabel(" g :");
		label_k = new JLabel(" k :");
		label_w = new JLabel(" w :");
		label_a = new JLabel(" a :");
		label_b = new JLabel(" b :");
		label_v = new JLabel(" v :");
		label_r = new JLabel(" r :");
		label_s = new JLabel(" s :");
		note1 = new JLabel("  (1) ne saissez que des entiers SVP  ");
		note2 = new JLabel(
				"  (2) Modifier le r pour vérifier que la signature sera invalide  ");
		verif = new JLabel("Procédé de vérification ");
		result = new JLabel(" siganture valide/invalide ");
		textField_priv_x = new JTextField(10);
		// textField_priv_x .setLineWrap(true);
		textField_publ_p = new JTextField(10);
		textField_publ_q = new JTextField(10);
		textField_publ_g = new JTextField(10);
		textField_publ_y = new JTextField(10);
		textField_priv_k = new JTextField(10);
		textField_w = new JTextField(10);
		textField_a = new JTextField(10);
		textField_b = new JTextField(10);
		textField_v = new JTextField(10);
		gen_keys = new JLabel("Procédé de signature ");
		textField_r = new JTextField(10);
		textField_s = new JTextField(10);
		JButton sign = new JButton("générer les clés");

		JButton verify = new JButton("vérifier la signature");
		sign.addActionListener(new DSASignButtonListner());
		verify.addActionListener(new DSAVerifyButtonListner());

		gbc.gridx = gbc.gridy = 0; // la grille commence en (0, 0)

		gbc.gridwidth = 2;
		gbc.gridheight = 1; /* une seule cellule verticalement suffit */

		gbc.anchor = GridBagConstraints.LINE_START; // ou BASELINE_LEADING mais
													// pas WEST.
		/*
		 * Aucun redimentionnement possible. Le bouton garde toujours soit sa
		 * taille minimum soit préférée.
		 */
		gbc.fill = GridBagConstraints.NONE;
		// gbc.insets = new Insets(10, 15, 0, 0); // Marge à gauche de 15 et
		// marge au dessus de 10.
		/*
		 * - les attributs ipadx, ipdady, weightx et weighty valent tous 0
		 * (valeur par défaut). - l'attribut fill est à NONE, car on ne souhaite
		 * pas de redimentionnement pour cette étiquette.
		 */

		gbc.insets = new Insets(10, 10, 10, 10);
		this.add(label, gbc);

		/* bouton suivant. */
		/*
		 * le bouton précédent peut s'étendre sur deux cellules horizontalement.
		 * Celui-ci commence en 2.
		 */
		gbc.gridx = 2; /* pour les dubitatifs, gridy vaut toujours 3 ;-) */

		gbc.gridwidth = GridBagConstraints.RELATIVE; // le bouton est l'avant
														// dernier composant de
														// sa ligne.

		// /* nous allons, sur ce bouton, définir un poids pour que celui-ci
		// s'éloigne le plus du bouton précédent.*/
		// gbc.weightx = 1.;
		// gbc.anchor = GridBagConstraints.BASELINE_TRAILING; // Pas LINE_END,
		// ni EAST.
		// gbc.insets = new Insets(0, 0, 0, 0);
		// this.add(textField_msgcl, gbc);

		/* notre dernier bouton. */
		gbc.gridx = 3;
		gbc.weightx = 0.; /* remettons le poids à zéro. */
		gbc.insets = new Insets(0, 3, 0, 10);
		this.add(textField_msgcl, gbc);

		/* notre dernier bouton. */
		gbc.gridx = 5;
		gbc.weightx = 0.; /* remettons le poids à zéro. */
		gbc.insets = new Insets(0, 3, 0, 10);
		this.add(sign, gbc);

		//

		/* Nous pouvons passé aux boutons. */
		gbc.gridy = 2; /* nouvelle ligne */
		gbc.gridx = 0; /*
						 * première colonne, nous allons placé notre bouton
						 * "make new folder"
						 */

		/*
		 * Reprenons l'image. Nous voyons que le bouton est plus large que
		 * l'étiquette située au dessus de lui et que le champ de saisie
		 * commence avant le bord gauche du bouton. Nous précisons donc deux
		 * cellules horizontalement.
		 */

		gbc.gridwidth = 2;
		gbc.gridheight = 1; /* une seule cellule verticalement suffit */

		/* Nous allons alignerles boutons sur leur ligne d'écriture également. */
		gbc.anchor = GridBagConstraints.BASELINE_LEADING;

		/*
		 * Aucun redimentionnement possible. Le bouton garde toujours soit sa
		 * taille minimum soit préférée.
		 */
		gbc.fill = GridBagConstraints.NONE;
		/* Les attributs weightx, weighty sont tout deux à 0. */

		JPanel p = new JPanel();
		p.add(label_p);
		p.add(textField_publ_p);

		/* Une petite marge autour du composant. */
		gbc.insets = new Insets(10, 10, 10, 10);
		this.add(p, gbc);

		/* notre dernier bouton. */
		gbc.gridx = 3;
		gbc.weightx = 0.; /* remettons le poids à zéro. */
		gbc.insets = new Insets(0, 3, 0, 10);
		JPanel q = new JPanel();
		q.add(label_q);
		q.add(textField_publ_q);
		this.add(q, gbc);

		/* notre dernier bouton. */
		gbc.gridx = 5;
		gbc.weightx = 0.; /* remettons le poids à zéro. */
		gbc.insets = new Insets(0, 3, 0, 10);
		JPanel g = new JPanel();
		g.add(label_g);
		g.add(textField_publ_g);
		this.add(g, gbc);

		//

		/* Nous pouvons passé aux boutons. */
		gbc.gridy = 3; /* nouvelle ligne */
		gbc.gridx = 0; /*
						 * première colonne, nous allons placé notre bouton
						 * "make new folder"
						 */

		/*
		 * Reprenons l'image. Nous voyons que le bouton est plus large que
		 * l'étiquette située au dessus de lui et que le champ de saisie
		 * commence avant le bord gauche du bouton. Nous précisons donc deux
		 * cellules horizontalement.
		 */

		gbc.gridwidth = 2;
		gbc.gridheight = 1; /* une seule cellule verticalement suffit */

		/* Nous allons alignerles boutons sur leur ligne d'écriture également. */
		gbc.anchor = GridBagConstraints.BASELINE_LEADING;

		/*
		 * Aucun redimentionnement possible. Le bouton garde toujours soit sa
		 * taille minimum soit préférée.
		 */
		gbc.fill = GridBagConstraints.NONE;
		/* Les attributs weightx, weighty sont tout deux à 0. */

		JPanel k = new JPanel();
		k.add(label_k);
		k.add(textField_priv_k);

		/* Une petite marge autour du composant. */
		gbc.insets = new Insets(10, 10, 10, 10);
		this.add(k, gbc);

		/* notre dernier bouton. */
		gbc.gridx = 3;
		gbc.weightx = 0.; /* remettons le poids à zéro. */
		gbc.insets = new Insets(0, 3, 0, 10);
		JPanel y = new JPanel();
		y.add(label_y);
		y.add(textField_publ_y);
		this.add(y, gbc);

		/* notre dernier bouton. */
		gbc.gridx = 5;
		gbc.weightx = 0.; /* remettons le poids à zéro. */
		gbc.insets = new Insets(0, 3, 0, 10);
		JPanel x = new JPanel();
		x.add(label_x);
		x.add(textField_priv_x);
		this.add(x, gbc);

		//

		/* Nous pouvons passé aux boutons. */
		gbc.gridy = 4; /* nouvelle ligne */
		gbc.gridx = 0; /*
						 * première colonne, nous allons placé notre bouton
						 * "make new folder"
						 */
		gbc.gridwidth = 2;
		gbc.gridheight = 1; /* une seule cellule verticalement suffit */
		gbc.anchor = GridBagConstraints.BASELINE_LEADING;
		gbc.fill = GridBagConstraints.NONE;
		gbc.insets = new Insets(10, 10, 10, 10);
		this.add(gen_keys, gbc);

		//

		/* Nous pouvons passé aux boutons. */
		gbc.gridy = 5; /* nouvelle ligne */
		gbc.gridx = 0; /*
						 * première colonne, nous allons placé notre bouton
						 * "make new folder"
						 */
		gbc.gridwidth = 2;
		gbc.gridheight = 1; /* une seule cellule verticalement suffit */
		gbc.anchor = GridBagConstraints.BASELINE_LEADING;
		gbc.fill = GridBagConstraints.NONE;
		gbc.insets = new Insets(10, 10, 10, 10);
		JPanel r = new JPanel();
		r.add(label_r);
		r.add(textField_r);
		this.add(r, gbc);
		/* notre dernier bouton. */
		gbc.gridx = 3;
		gbc.weightx = 0.; /* remettons le poids à zéro. */
		gbc.insets = new Insets(0, 3, 0, 10);
		JPanel s = new JPanel();
		s.add(label_s);
		s.add(textField_s);
		this.add(s, gbc);

		/* notre dernier bouton. */
		gbc.gridx = 5;
		gbc.weightx = 0.; /* remettons le poids à zéro. */
		gbc.insets = new Insets(12, 0, 0, 0);
		this.add(verify, gbc);

		//

		/* Nous pouvons passé aux boutons. */
		gbc.gridy = 6; /* nouvelle ligne */
		gbc.gridx = 0; /*
						 * première colonne, nous allons placé notre bouton
						 * "make new folder"
						 */

		gbc.gridwidth = 2;
		gbc.gridheight = 1; /* une seule cellule verticalement suffit */

		gbc.anchor = GridBagConstraints.BASELINE_LEADING;
		gbc.fill = GridBagConstraints.NONE;
		gbc.insets = new Insets(10, 10, 10, 10);
		this.add(verif, gbc);

		//

		// /* Nous pouvons passé aux boutons. */
		gbc.gridy = 7; /* nouvelle ligne */
		gbc.gridx = 0; /*
						 * première colonne, nous allons placé notre bouton
						 * "make new folder"
						 */
		gbc.gridwidth = 2;
		gbc.gridheight = 1; /* une seule cellule verticalement suffit */
		gbc.anchor = GridBagConstraints.BASELINE_LEADING;
		gbc.fill = GridBagConstraints.NONE;
		gbc.insets = new Insets(10, 10, 10, 10);
		JPanel w = new JPanel();
		w.add(label_w);
		w.add(textField_w);
		this.add(w, gbc);
		/* notre dernier bouton. */
		gbc.gridx = 3;
		gbc.weightx = 0.; /* remettons le poids à zéro. */
		gbc.insets = new Insets(0, 3, 0, 10);
		JPanel sd = new JPanel();
		sd.add(label_a);
		sd.add(textField_a);
		this.add(sd, gbc);

		/* notre dernier bouton. */
		gbc.gridx = 5;
		gbc.weightx = 0.; /* remettons le poids à zéro. */
		gbc.insets = new Insets(0, 3, 0, 10);
		JPanel b = new JPanel();
		b.add(label_b);
		b.add(textField_b);
		this.add(b, gbc);

		//

		/* Nous pouvons passé aux boutons. */
		gbc.gridy = 8; /* nouvelle ligne */
		gbc.gridx = 0; /*
						 * première colonne, nous allons placé notre bouton
						 * "make new folder"
						 */
		gbc.gridwidth = 2;
		gbc.gridheight = 1; /* une seule cellule verticalement suffit */
		gbc.anchor = GridBagConstraints.BASELINE_LEADING;
		gbc.fill = GridBagConstraints.NONE;
		gbc.insets = new Insets(10, 10, 10, 10);
		JPanel v = new JPanel();
		v.add(label_v);
		v.add(textField_v);
		this.add(v, gbc);
		/* notre dernier bouton. */
		gbc.gridx = 3;
		gbc.weightx = 0.; /* remettons le poids à zéro. */
		gbc.insets = new Insets(25, 15, 0, 0);

		this.add(result, gbc);

		//

		/* Nous pouvons passé aux boutons. */
		gbc.gridy = 9; /* nouvelle ligne */
		gbc.gridx = 0; /*
						 * première colonne, nous allons placé notre bouton
						 * "make new folder"
						 */

		gbc.gridwidth = 5;
		gbc.gridheight = 1; /* une seule cellule verticalement suffit */

		gbc.anchor = GridBagConstraints.BASELINE_LEADING;
		gbc.fill = GridBagConstraints.NONE;
		gbc.insets = new Insets(10, 10, 10, 10);
		this.add(note1, gbc);

		/* Nous pouvons passé aux boutons. */
		gbc.gridy = 10; /* nouvelle ligne */
		gbc.gridx = 0; /*
						 * première colonne, nous allons placé notre bouton
						 * "make new folder"
						 */

		gbc.gridwidth = 5;
		gbc.gridheight = 1; /* une seule cellule verticalement suffit */

		gbc.anchor = GridBagConstraints.BASELINE_LEADING;
		gbc.fill = GridBagConstraints.NONE;
		gbc.insets = new Insets(10, 10, 10, 10);
		this.add(note2, gbc);

		// // Color y= new Color(64,98,125);
		// // this.setBackground(y);

	}

}
